package com.woniuxy.controller;

import com.woniuxy.core.service.UserStatsService;
import com.woniuxy.entity.AllUser;
import com.woniuxy.entity.DTO.UserGrowthDTO;
import com.woniuxy.entity.DTO.UserQueryDTO;
import com.woniuxy.service.IUserService;
import com.woniuxy.util.PageResult;
import com.woniuxy.util.ResponseData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.List;

/**
 * @Author pml
 * @Date 2025/7/15 19:00
 * @Description TODO
 * 用户管理控制器
 * 处理用户相关的所有HTTP请求
 */
@RestController
@RequestMapping("/admin/user")
public class UserController {

    @Autowired
    private IUserService userService;

    @Autowired
    private UserStatsService userStatsService;
    /**
     * 分页多条件查询用户列表
     * 使用GET请求，参数通过查询字符串传递
     */
    @GetMapping("/list")
    public ResponseData<PageResult<AllUser>> getUserList(UserQueryDTO queryDTO) {
        PageResult<AllUser> pageResult = userService.getUserList(queryDTO);
        return ResponseData.ok(pageResult);
    }

    /**
     * 根据ID查询单个用户
     * 路径参数方式传递用户ID
     */
    @GetMapping("/{userId}")
    public ResponseData<AllUser> getUserById(@PathVariable Long userId) {
        AllUser user = userService.getById(userId);
        return ResponseData.ok(user);
    }

    /**
     * 新增用户
     * 使用POST请求，JSON格式传递用户信息
     */
    @PostMapping
    public ResponseData addUser(@RequestBody AllUser user) {
        // 设置初始值：未删除、未实名
        user.setIsDeleted(0);
        user.setIsAuth(0);
        boolean success = userService.save(user);
//        return success ? ResponseData.ok() : ResponseData.fail(500, "新增用户失败");
        if (success) {
            // 用户保存成功后，立即初始化其统计信息
            // 传入新创建用户的ID，确保统计记录与用户关联
            userStatsService.initUserStats(user.getUserId());
            return ResponseData.ok();
        } else {
            return ResponseData.fail(500, "新增用户失败");
        }
    }

    /**
     * 更新用户信息
     * 使用PUT请求，JSON格式传递更新信息
     */
    @PutMapping
    public ResponseData updateUser(@RequestBody AllUser user) {
        boolean success = userService.updateById(user);
        return success ? ResponseData.ok() : ResponseData.fail(500, "更新用户失败");
    }

    /**
     * 根据ID删除单个用户
     * 使用DELETE请求，路径参数传递用户ID
     */
    @DeleteMapping("/{userId}")
    public ResponseData deleteUser(@PathVariable("userId") Long userId) {
        boolean success = userService.removeById(userId);
        return success ? ResponseData.ok() : ResponseData.fail(500, "删除用户失败");
    }

    /**
     * 批量删除用户
     * 使用DELETE请求，请求体传递用户ID列表
     */
    @DeleteMapping("/batch")
    public ResponseData batchDeleteUser(@RequestBody List<Long> userIds) {
        boolean success = userService.removeByIds(userIds);
        return success ? ResponseData.ok() : ResponseData.fail(500, "批量删除失败");
    }

    /**
     * 获取用户增长趋势数据接口
     * 前端通过此接口获取指定日期范围内的用户增长数据
     */
    @GetMapping("/growth/trend")
    public ResponseData<List<UserGrowthDTO>> getUserGrowthTrend(
            @RequestParam("startDate") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date startDate,
            @RequestParam("endDate") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date endDate) {
        List<UserGrowthDTO> growthTrend = userService.getUserGrowthTrend(startDate, endDate);
        return ResponseData.ok(growthTrend);
    }
}